home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Basic / Visual Basic.60 / COMMON / TOOLS / VCM / VCM.MDB / VcmComponentContainer / 02_Cabinet / MONTHCAL.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-18  |  6.5 KB  |  249 lines

  1. // MonthCalPage.cpp : implementation file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "resource.h"
  15.  
  16. #include "MonthCal.h"
  17.  
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23.  
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CMonthCalPage property page
  26.  
  27. IMPLEMENT_DYNCREATE(CMonthCalPage, CPropertyPage)
  28.  
  29. CMonthCalPage::CMonthCalPage() : CPropertyPage(CMonthCalPage::IDD)
  30. {
  31.     //{{AFX_DATA_INIT(CMonthCalPage)
  32.     m_nMaxSelCount = 0;
  33.     m_pszRange = _T("");
  34.     m_pszSelection = _T("");
  35.     m_bDayState = FALSE;
  36.     m_bNoToday = FALSE;
  37.     m_bNoTodayCircle = FALSE;
  38.     m_bWeekNumbers = FALSE;
  39.     m_bMultiSelect = FALSE;
  40.     //}}AFX_DATA_INIT
  41.     m_psp.dwFlags &= ~PSP_HASHELP;  // Lose the Help button
  42. }
  43.  
  44. CMonthCalPage::~CMonthCalPage()
  45. {
  46. }
  47.  
  48. void CMonthCalPage::DoDataExchange(CDataExchange* pDX)
  49. {
  50.     CPropertyPage::DoDataExchange(pDX);
  51.     //{{AFX_DATA_MAP(CMonthCalPage)
  52.     DDX_Control(pDX, IDC_EDSELRANGE, m_edMaxSel);
  53.     DDX_Control(pDX, IDC_NOTIFYLIST, m_NotifyList);
  54.     DDX_Text(pDX, IDC_EDSELRANGE, m_nMaxSelCount);
  55.     DDX_Text(pDX, IDC_STRRANGE, m_pszRange);
  56.     DDX_Text(pDX, IDC_STRSELECTION, m_pszSelection);
  57.     DDX_Check(pDX, IDC_CKDAYSTATE, m_bDayState);
  58.     DDX_Check(pDX, IDC_CKNOTODAY, m_bNoToday);
  59.     DDX_Check(pDX, IDC_CKNOTODAYCIRCLE, m_bNoTodayCircle);
  60.     DDX_Check(pDX, IDC_CKWEEKNUMBERS, m_bWeekNumbers);
  61.     DDX_Check(pDX, IDC_CMULTISELECT, m_bMultiSelect);
  62.     //}}AFX_DATA_MAP
  63. }
  64.  
  65.  
  66. BEGIN_MESSAGE_MAP(CMonthCalPage, CPropertyPage)
  67.     //{{AFX_MSG_MAP(CMonthCalPage)
  68.     ON_BN_CLICKED(IDC_CKNOTODAY, OnCknotoday)
  69.     ON_BN_CLICKED(IDC_CKNOTODAYCIRCLE, OnCknotodaycircle)
  70.     ON_BN_CLICKED(IDC_CKWEEKNUMBERS, OnCkweeknumbers)
  71.     ON_BN_CLICKED(IDC_CMULTISELECT, OnCmultiselect)
  72.     ON_EN_CHANGE(IDC_EDSELRANGE, OnChangeEdselrange)
  73.     ON_BN_CLICKED(IDC_CKDAYSTATE, OnCkdaystate)
  74.     //}}AFX_MSG_MAP
  75.     ON_NOTIFY(MCN_SELCHANGE,IDC_MONTHCAL,HandleSelChange)
  76.     ON_NOTIFY(MCN_SELECT,IDC_MONTHCAL,HandleSelect)
  77.     ON_NOTIFY(MCN_GETDAYSTATE,IDC_MONTHCAL,GetDayState)
  78. END_MESSAGE_MAP()
  79.  
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CMonthCalPage message handlers
  82.  
  83. BOOL CMonthCalPage::OnInitDialog()
  84. {
  85.     CPropertyPage::OnInitDialog();
  86.  
  87.     CWnd *pFrame = GetDlgItem(IDC_MCFRAME);
  88.     CRect rcWnd;
  89.     pFrame->GetClientRect(rcWnd);
  90.     pFrame->DestroyWindow(); //pFrame was just a placeholder anyway.
  91.     m_MonthCal.Create(WS_CHILD|WS_VISIBLE,CPoint(rcWnd.left,rcWnd.top),this,IDC_MONTHCAL);
  92.     m_nMaxSelCount = m_MonthCal.GetMaxSelCount();
  93.     UpdateData(FALSE);
  94.  
  95.     return TRUE;
  96. }
  97.  
  98. void CMonthCalPage::OnCknotoday()
  99. {
  100.     UpdateData(TRUE);
  101.  
  102.     if(m_bNoToday)
  103.     {
  104.         //add style
  105.         m_MonthCal.ModifyStyle(0,MCS_NOTODAY,SWP_NOSIZE);
  106.     }
  107.     else
  108.     {
  109.         //remove style
  110.         m_MonthCal.ModifyStyle(MCS_NOTODAY,0,SWP_NOSIZE);
  111.     }
  112.     m_MonthCal.SizeMinReq();
  113. }
  114. void CMonthCalPage::OnCknotodaycircle()
  115. {
  116.     UpdateData(TRUE);
  117.     if(m_bNoTodayCircle)
  118.     {
  119.         //add style
  120.         m_MonthCal.ModifyStyle(0,MCS_NOTODAYCIRCLE,SWP_NOSIZE);
  121.     }
  122.     else
  123.     {
  124.         //remove style
  125.         m_MonthCal.ModifyStyle(MCS_NOTODAYCIRCLE,SWP_NOSIZE);
  126.     }
  127.  
  128. }
  129. void CMonthCalPage::OnCkweeknumbers()
  130. {
  131.     UpdateData(TRUE);
  132.     if(m_bWeekNumbers)
  133.     {
  134.         //add style
  135.         m_MonthCal.ModifyStyle(0,MCS_WEEKNUMBERS,SWP_NOSIZE);
  136.     }
  137.     else
  138.     {
  139.         //remove style
  140.         m_MonthCal.ModifyStyle(MCS_WEEKNUMBERS,SWP_NOSIZE);
  141.     }
  142.     m_MonthCal.SizeMinReq();
  143.  
  144. }
  145.  
  146. void CMonthCalPage::OnCmultiselect()
  147. {
  148.     UpdateData(TRUE);
  149.     if(m_bMultiSelect)
  150.     {
  151.         long lStyle; CRect rc;
  152.         lStyle = ::GetWindowLong(m_MonthCal.m_hWnd,GWL_STYLE);
  153.         lStyle |= MCS_MULTISELECT;
  154.         m_MonthCal.GetClientRect(rc);
  155.         m_MonthCal.DestroyWindow();
  156.         m_MonthCal.Create(lStyle,CPoint(rc.left,rc.top),this,IDC_MONTHCAL);
  157.         m_nMaxSelCount = m_MonthCal.GetMaxSelCount();
  158.         UpdateData(FALSE);
  159.         m_edMaxSel.EnableWindow(TRUE);
  160.  
  161.     }
  162.     else
  163.     {
  164.         //remove style
  165.         long lStyle; CRect rc;
  166.         lStyle = ::GetWindowLong(m_MonthCal.m_hWnd,GWL_STYLE);
  167.         lStyle &= ~MCS_MULTISELECT;
  168.         m_MonthCal.GetClientRect(rc);
  169.         m_MonthCal.DestroyWindow();
  170.         m_MonthCal.Create(lStyle,CPoint(rc.left,rc.top),this,IDC_MONTHCAL);
  171.         m_nMaxSelCount = m_MonthCal.GetMaxSelCount();
  172.         UpdateData(FALSE);
  173.         m_edMaxSel.EnableWindow(FALSE);
  174.     }
  175.  
  176. }
  177.  
  178. void CMonthCalPage::OnCkdaystate()
  179. {
  180.     UpdateData(TRUE);
  181.     if(m_bDayState)
  182.     {
  183.         long lStyle; CRect rc;
  184.         lStyle = ::GetWindowLong(m_MonthCal.m_hWnd,GWL_STYLE);
  185.         lStyle |= MCS_DAYSTATE;
  186.         m_MonthCal.GetClientRect(rc);
  187.         m_MonthCal.DestroyWindow();
  188.         m_MonthCal.Create(lStyle,CPoint(rc.left,rc.top),this,IDC_MONTHCAL);
  189.         UpdateData(FALSE);
  190.  
  191.     }
  192.     else
  193.     {
  194.         //remove style
  195.         long lStyle; CRect rc;
  196.         lStyle = ::GetWindowLong(m_MonthCal.m_hWnd,GWL_STYLE);
  197.         lStyle &= ~MCS_DAYSTATE;
  198.         m_MonthCal.GetClientRect(rc);
  199.         m_MonthCal.DestroyWindow();
  200.         m_MonthCal.Create(lStyle,CPoint(rc.left,rc.top),this,IDC_MONTHCAL);
  201.         m_nMaxSelCount = m_MonthCal.GetMaxSelCount();
  202.         UpdateData(FALSE);
  203.     }
  204. }
  205.  
  206. //Notification handlers for notifications from the MonthCal control
  207. void CMonthCalPage::GetDayState(NMHDR *pHdr, LRESULT *pRes)
  208. {
  209.     NMDAYSTATE *pds = (NMDAYSTATE*)pHdr;
  210.     m_NotifyList.AddString(_T("MCN_GETDAYSTATE"));
  211.     //this function just bolds the first four days of every visible
  212.     //month.
  213.     for(int i=0;i<pds->cDayState;i++)
  214.         pds->prgDayState[i]=0xf;
  215.  
  216. }
  217.  
  218. void CMonthCalPage::HandleSelect(NMHDR *pHdr, LRESULT *pRes)
  219. {
  220.     m_NotifyList.AddString(_T("MCN_SELECT"));
  221.     if((m_MonthCal.GetStyle() & MCS_MULTISELECT))
  222.         return;
  223.     CTime ct;
  224.     m_MonthCal.GetCurSel(ct);
  225.     m_pszSelection.Format(_T("%02d/%02d/%2d"),ct.GetMonth(),ct.GetDay(),ct.GetYear());
  226.     UpdateData(FALSE);
  227.  
  228. }
  229.  
  230. void CMonthCalPage::HandleSelChange(NMHDR *pHdr, LRESULT *pRes)
  231. {
  232.  
  233.     m_NotifyList.AddString(_T("MCN_SELCHANGE"));
  234.     if(! (m_MonthCal.GetStyle() & MCS_MULTISELECT))
  235.         return;
  236.     CTime ctmin,ctmax;
  237.     m_MonthCal.GetSelRange(ctmin,ctmax);
  238.     m_pszRange.Format(_T("%02d/%02d/%2d to %02d/%02d/%2d"), ctmin.GetMonth(),ctmin.GetDay(),ctmin.GetYear(),
  239.                                 ctmax.GetMonth(),ctmax.GetDay(),ctmax.GetYear());
  240.     UpdateData(FALSE);
  241. }
  242.  
  243. //Handler for selection range edit control
  244. void CMonthCalPage::OnChangeEdselrange()
  245. {
  246.     UpdateData(TRUE);
  247.     m_MonthCal.SetMaxSelCount(m_nMaxSelCount);
  248. }
  249.